如果我知道寫程式可以解決人的問題,我會更早開始成為一位工程師。
為了解決人的問題,我選擇成為一名軟體工程師。最初作為 Java 後端開發,我很快意識到,光寫程式碼是不夠的,還有程式碼的交付與運行。而這份好奇心促使我在 2018 年進入 DevOps/SRE 領域。
Kubernetes 是現代基礎設施的核心技術,因此我最近再次系統性地學習 Kubernetes。在此過程中,我依賴 Google Research、kubernetes.io、Kubernetes Enhancement Proposals 以及邱牛的部落格等資源,深入理解了許多概念和實踐。這些靈感促使我整理並分享這些收穫,也是我參加鐵人賽的主要動機之一。
除了受到這些靈感驅動,我在職涯中也從社群中吸取了大量養分。儘管沒有發表技術文章的經驗,但為了分享這些有趣的想法給社群,我決定參加鐵人賽。這不僅是技術寫作的挑戰,也是一次重新思考技術寫作目的的機會。在後 LLM 時代,我開始反思,技術寫作除了傳遞知識之外,是否還能有更深的意義。因此,參加鐵人賽是我促使自己深入思考的一個方式。
對我來說,學習就是思考。而這次重新學 Kubernetes,就是一次重新思考的機會,正因如此,我選了 "Think Again Kubernetes" 作為我這次參賽的主題。
在沒有發表技術文章的經驗下,參加鐵人賽是一項極具挑戰的任務,為了提高成功的機會,我開始尋找榜樣。首先,我從對我影響最深的幾位作家著手,包括 Kent Beck、Martin Fowler 和 Robert C. Martin。
然而,最終我選擇了林信良林前輩作為我的榜樣。
選擇林前輩作為我的榜樣,是因為在早期學習 Java 的過程中,我從他的部落格“良葛格學習筆記”中獲得了大量啟發。後來,我在天瓏書籍買了一本他的《Java SE 8 技術手冊》,這本書陪伴了我很長時間,即使後來轉向其他技術領域,每當我需要學習新技術時,仍會回到他的部落格尋找靈感。每次逛天瓏書店,看到熟悉的白色封面,總會讓我感到安心,而我寫作的目的,就是想要分享這份感受,所以我選擇林前輩作為榜樣。
對我來說,寫作這些文章就像精心準備一份禮物,我希望這份禮物不僅能分享我的經驗與感受,也能激發你對技術學習的熱情。無論結果如何,我都希望你能與我一起享受這個探索和學習的過程。
我的目標讀者
我希望分享的是 Kubernetes 中有趣的細節,讓讀者每次閱讀這些文章都能獲得新的啟發,並且享受學習的過程。
經由閱讀這個系列文章,你將思考:
Process 到 Kubernetes 的演化:我們會從作業系統角度開始分析容器技術的演變,並介紹一些 Google Research 關於 Kubernetes 的公開論文。
Kubernetes 的核心概念:我們會介紹 Pod 以及 Control Loop
Kubernetes 的組件:探討 Kubernetes 的核心組件以及實務上與它們的互動。
討論一些有趣的 Kubernetes Pattern。
不會包含的部分:
如何開發 Containerized Application
如何考取 Certified Kubernetes Administrator
由於本系列文章目的是刻意挖掘 Kubernetes 有趣的細節,而不是傳遞實務上需要的完整知識,在這個前提下,寫作的目標讀者下列五題至少可以回答兩題者,如果這些問題對你來說還太過陌生,我強烈建議在閱讀本系列之前,先找其他更加完整的資料。
自我檢測的五個問題
Pod 跟 Container 之間的關係是什麼?是一個 Pod 可以包含多個 Container,還是一個 Container 可以包含多個 Pod?
要啟動一個 Nginx Pod,你執行 kubectl run --image nginx my-nginx。這時會傳送請求到 control plane 的 API server 還是 data plane 的 kubelet?
有兩個 Pods,分別為 Pod A(由 Deployment 建立)和 Pod B(管理員直接建立)。刪除這兩個 Pods 後,Kubernetes 會重新啟動哪一個?
一個服務需要接受來自 Kubernetes 之內的流量,通常會選擇 ClusterIP 還是 NodePort?
HTTP Path 定義在 Ingress 還是 Service?